package com.bbva.kyfb.kyfbdto.firmas.fachada.v01;

import java.io.Serializable;
import java.util.Date;

import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * Tipo de dato de entrada con un los datos de la referencia y un usuario de la
 * misma.
 * 
 * @author xe35008
 * @version 1.0
 */
@XmlRootElement
public class InfoFileDetailedRequest implements Serializable, ITipoFirmaAndNIF {

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 1L;

	/** Canal asociado a la referencia. */
	private String sCanal;

	/** Banco interno asociado a la referencia. */
	private String sBancoInt;

	/** Referencia asociada a la orden. */
	private String sReferencia;

	/** Aplicacion de origen de la llamada. */
	private String sCodOrigen;

	/** Tipo de orden que se quiere consultar. */
	private String sTipoOrden;

	/** Codigo de usuario. */
	private String sCodUsuario;

	/** Nif del usuario. */
	private String sNIFUsuario;

	/** Banco Producto. */
	private String sCodBancoProd;

	/** Codigo de producto. */
	private String sCodProducto;

	/** Codigo de subproducto. */
	private String sCodSubproducto;

	/** Tipo de firma. */
	private String sTipoFirma;

	/** Estado de la orden. */
	private String sCodEstado;

	/** Divisa de la orden. */
	private String sDivisa;

	/** Tipo de fecha, creacion o proceso. */
	private String sTipoFecha;

	/** Rango de fecha. */
	private Date sFechaDesde;

	/** Rango de fecha. */
	private Date sFechaHasta;

	/** Rango de importe. */
	private Double sImporteDeste;

	/** Rango de importe. */
	private Double sImporteHasta;

	/** Usuario que intervino en algun estado. */
	private String sUsuarioOrdenante;

	/** Rango paginacion. */
	private int iPaginacionDesde;

	/** Numero de elementos a devolver. */
	private int iPaginacionNumElementos;

	/** The s campo de ordenacion. */
	private String sValorOrdenacion;

	/** The s modo de ordenacion. */
	private String sModoOrdenacion;

	/**
	 * Instantiates a new info file detailed request.
	 */
	public InfoFileDetailedRequest() {
	}

	/**
	 * Gets the s canal.
	 * 
	 * @return the sCanal
	 */
	@NotNull
	@NotEmpty
	@Length(min = 4, max = 4)
	public String getsCanal() {
		return sCanal;
	}

	/**
	 * Sets the s canal.
	 * 
	 * @param sCanal
	 *            the sCanal to set
	 */
	public void setsCanal(final String sCanal) {
		this.sCanal = sCanal;
	}

	/**
	 * Gets the s banco int.
	 * 
	 * @return the sBancoInt
	 */
	@NotNull
	@NotEmpty
	@Length(min = 4, max = 4)
	@Digits(fraction = 0, integer = 4)
	public String getsBancoInt() {
		return sBancoInt;
	}

	/**
	 * Sets the s banco int.
	 * 
	 * @param sBancoInt
	 *            the sBancoInt to set
	 */
	public void setsBancoInt(final String sBancoInt) {
		this.sBancoInt = sBancoInt;
	}

	/**
	 * Gets the s referencia.
	 * 
	 * @return the sReferencia
	 */
	@NotNull
	@NotEmpty
	@Length(min = 8, max = 8)
	@Digits(fraction = 0, integer = 8)
	public String getsReferencia() {
		return sReferencia;
	}

	/**
	 * Sets the s referencia.
	 * 
	 * @param sReferencia
	 *            the sReferencia to set
	 */
	public void setsReferencia(final String sReferencia) {
		this.sReferencia = sReferencia;
	}

	/**
	 * Gets the s cod origen.
	 * 
	 * @return the sCodOrigen
	 */
	@NotNull
	@NotEmpty
	@Length(min = 4, max = 4)
	// @Digits(fraction = 0, integer = 4)
	public String getsCodOrigen() {
		return sCodOrigen;
	}

	/**
	 * Sets the s cod origen.
	 * 
	 * @param sCodOrigen
	 *            the sCodOrigen to set
	 */
	public void setsCodOrigen(final String sCodOrigen) {
		this.sCodOrigen = sCodOrigen;
	}

	/**
	 * Gets the s tipo orden.
	 * 
	 * @return the sTipoOrden
	 */
	@Pattern(regexp = "(\\p{Alnum}{3}(\\|\\p{Alnum}{3})*)*")
	public String getsTipoOrden() {
		return sTipoOrden;
	}

	/**
	 * Sets the s tipo orden.
	 * 
	 * @param sTipoOrden
	 *            the sTipoOrden to set
	 */
	public void setsTipoOrden(final String sTipoOrden) {
		this.sTipoOrden = sTipoOrden;
	}

	/**
	 * Gets the s cod usuario.
	 * 
	 * @return the sCodUsuario
	 */
	@NotNull
	@NotEmpty
	@Length(min = 1, max = 8)
	public String getsCodUsuario() {
		return sCodUsuario;
	}

	/**
	 * Sets the s cod usuario.
	 * 
	 * @param sCodUsuario
	 *            the sCodUsuario to set
	 */
	public void setsCodUsuario(final String sCodUsuario) {
		this.sCodUsuario = sCodUsuario;
	}

	/**
	 * Gets the s nif usuario.
	 * 
	 * @return the sNIFUsuario
	 */
	@Override
	public String getsNIFUsuario() {
		return sNIFUsuario;
	}

	/**
	 * Sets the s nif usuario.
	 * 
	 * @param sNIFUsuario
	 *            the sNIFUsuario to set
	 */
	public void setsNIFUsuario(final String sNIFUsuario) {
		this.sNIFUsuario = sNIFUsuario;
	}

	/**
	 * Gets the s cod banco prod.
	 * 
	 * @return the sCodBancoProd
	 */
	@NotNull
	@NotEmpty
	@Length(min = 1, max = 4)
	public String getsCodBancoProd() {
		return sCodBancoProd;
	}

	/**
	 * Sets the s cod banco prod.
	 * 
	 * @param sCodBancoProd
	 *            the sCodBancoProd to set
	 */
	public void setsCodBancoProd(final String sCodBancoProd) {
		this.sCodBancoProd = sCodBancoProd;
	}

	/**
	 * Gets the s cod producto.
	 * 
	 * @return the sCodProducto
	 */
	@NotNull
	@NotEmpty
	@Length(min = 1, max = 4)
	public String getsCodProducto() {
		return sCodProducto;
	}

	/**
	 * Sets the s cod producto.
	 * 
	 * @param sCodProducto
	 *            the sCodProducto to set
	 */
	public void setsCodProducto(final String sCodProducto) {
		this.sCodProducto = sCodProducto;
	}

	/**
	 * Gets the s cod subproducto.
	 * 
	 * @return the sCodSubproducto
	 */
	@NotNull
	@NotEmpty
	@Length(min = 1, max = 4)
	public String getsCodSubproducto() {
		return sCodSubproducto;
	}

	/**
	 * Sets the s cod subproducto.
	 * 
	 * @param sCodSubproducto
	 *            the sCodSubproducto to set
	 */
	public void setsCodSubproducto(final String sCodSubproducto) {
		this.sCodSubproducto = sCodSubproducto;
	}

	/**
	 * Gets the s tipo firma.
	 * 
	 * @return the sTipoFirma
	 */
	@Override
	@NotNull
	@NotEmpty
	@Pattern(regexp = "FS|FH")
	public String getsTipoFirma() {
		return sTipoFirma;
	}

	/**
	 * Sets the s tipo firma.
	 * 
	 * @param sTipoFirma
	 *            the sTipoFirma to set
	 */
	public void setsTipoFirma(final String sTipoFirma) {
		this.sTipoFirma = sTipoFirma;
	}

	/**
	 * Gets the s cod estado.
	 * 
	 * @return the sCodEstado
	 */
	@Pattern(regexp = "(\\s|TO|PF|FP|PA|EC|PN|EN|EX|PD|PL|PX|LI|PE|HO|RE|EJ|RF|EP|PR|ER|PC|PP|RA|AT|BM|BH|BD|EL)*(\\|(TO|PF|FP|PA|EC|PN|EN|EX|PD|PL|PX|LI|PE|HO|RE|EJ|RF|EP|PR|ER|PC|PP|RA|AT|BM|BH|BD|EL))*")
	public String getsCodEstado() {
		return sCodEstado;
	}

	/**
	 * Sets the s cod estado.
	 * 
	 * @param sCodEstado
	 *            the sCodEstado to set
	 */
	public void setsCodEstado(final String sCodEstado) {
		this.sCodEstado = sCodEstado;
	}

	/**
	 * Gets the s divisa.
	 * 
	 * @return the sDivisa
	 */
	@Pattern(regexp = "\\p{Alpha}{3}(\\|\\p{Alpha}{3})*")
	public String getsDivisa() {
		return sDivisa;
	}

	/**
	 * Sets the s divisa.
	 * 
	 * @param sDivisa
	 *            the sDivisa to set
	 */
	public void setsDivisa(final String sDivisa) {
		this.sDivisa = sDivisa;
	}

	/**
	 * Gets the s tipo fecha.
	 * 
	 * @return the sTipoFecha
	 */
	@Pattern(regexp = "TO|FC|FP")
	public String getsTipoFecha() {
		return sTipoFecha;
	}

	/**
	 * Sets the s tipo fecha.
	 * 
	 * @param sTipoFecha
	 *            the sTipoFecha to set
	 */
	public void setsTipoFecha(final String sTipoFecha) {
		this.sTipoFecha = sTipoFecha;
	}

	/**
	 * Gets the s fecha desde.
	 * 
	 * @return the sFechaDesde
	 */
	public Date getsFechaDesde() {
		return sFechaDesde;
	}

	/**
	 * Sets the s fecha desde.
	 * 
	 * @param sFechaDesde
	 *            the sFechaDesde to set
	 */
	public void setsFechaDesde(final Date sFechaDesde) {
		this.sFechaDesde = sFechaDesde;
	}

	/**
	 * Gets the s fecha hasta.
	 * 
	 * @return the sFechaHasta
	 */
	public Date getsFechaHasta() {
		return sFechaHasta;
	}

	/**
	 * Sets the s fecha hasta.
	 * 
	 * @param sFechaHasta
	 *            the sFechaHasta to set
	 */
	public void setsFechaHasta(final Date sFechaHasta) {
		this.sFechaHasta = sFechaHasta;
	}

	/**
	 * Gets the s importe deste.
	 * 
	 * @return the sImporteDeste
	 */
	public Double getsImporteDeste() {
		return sImporteDeste;
	}

	/**
	 * Sets the s importe deste.
	 * 
	 * @param sImporteDeste
	 *            the sImporteDeste to set
	 */
	public void setsImporteDeste(final Double sImporteDeste) {
		this.sImporteDeste = sImporteDeste;
	}

	/**
	 * Gets the s importe hasta.
	 * 
	 * @return the sImporteHasta
	 */
	public Double getsImporteHasta() {
		return sImporteHasta;
	}

	/**
	 * Sets the s importe hasta.
	 * 
	 * @param sImporteHasta
	 *            the sImporteHasta to set
	 */
	public void setsImporteHasta(final Double sImporteHasta) {
		this.sImporteHasta = sImporteHasta;
	}

	/**
	 * Gets the s usuario ordenante.
	 * 
	 * @return the sUsuarioOrdenante
	 */
	@Length(max = 8)
	public String getsUsuarioOrdenante() {
		return sUsuarioOrdenante;
	}

	/**
	 * Sets the s usuario ordenante.
	 * 
	 * @param sUsuarioOrdenante
	 *            the sUsuarioOrdenante to set
	 */
	public void setsUsuarioOrdenante(final String sUsuarioOrdenante) {
		this.sUsuarioOrdenante = sUsuarioOrdenante;
	}

	/**
	 * Gets the i paginacion desde.
	 * 
	 * @return the iPaginacionDesde
	 */
	public int getiPaginacionDesde() {
		return iPaginacionDesde;
	}

	/**
	 * Sets the i paginacion desde.
	 * 
	 * @param iPaginacionDesde
	 *            the iPaginacionDesde to set
	 */
	public void setiPaginacionDesde(final int iPaginacionDesde) {
		this.iPaginacionDesde = iPaginacionDesde;
	}

	/**
	 * Gets the i paginacion num elementos.
	 * 
	 * @return the iPaginacionNumElementos
	 */
	public int getiPaginacionNumElementos() {
		return iPaginacionNumElementos;
	}

	/**
	 * Sets the i paginacion num elementos.
	 * 
	 * @param iPaginacionNumElementos
	 *            the iPaginacionNumElementos to set
	 */
	public void setiPaginacionNumElementos(final int iPaginacionNumElementos) {
		this.iPaginacionNumElementos = iPaginacionNumElementos;
	}

	/**
	 * Gets the s valor de ordenacion.
	 * 
	 * @return the sValorOrdenacion
	 */
	@Pattern(regexp = "TIOR|ESTA|DIVI|FECR|FEPR|IMPO|NOFI|ASUN|NUOR")
	public String getsValorOrdenacion() {
		return sValorOrdenacion;
	}

	/**
	 * Sets the s valor ordenacion.
	 * 
	 * @param sValorOrdenacion
	 *            the sValorOrdenacion to set
	 */
	public void setsValorOrdenacion(final String sValorOrdenacion) {
		this.sValorOrdenacion = sValorOrdenacion;
	}

	/**
	 * Gets the s Modo de ordenacion.
	 * 
	 * @return the sModoOrdenacion
	 */
	@Pattern(regexp = "ASC|DESC")
	public String getsModoOrdenacion() {
		return sModoOrdenacion;
	}

	/**
	 * Sets the s modo ordenacion.
	 * 
	 * @param sModoOrdenacion
	 *            the sModoOrdenacion to set
	 */
	public void setsModoOrdenacion(final String sModoOrdenacion) {
		this.sModoOrdenacion = sModoOrdenacion;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "InfoFileDetailedRequest [sCanal=" + sCanal + ", sBancoInt="
				+ sBancoInt + ", sReferencia=" + sReferencia + ", sCodOrigen="
				+ sCodOrigen + ", sTipoOrden=" + sTipoOrden + ", sCodUsuario="
				+ sCodUsuario + ", sNIFUsuario=" + sNIFUsuario
				+ ", sCodBancoProd=" + sCodBancoProd + ", sCodProducto="
				+ sCodProducto + ", sCodSubproducto=" + sCodSubproducto
				+ ", sTipoFirma=" + sTipoFirma + ", sCodEstado=" + sCodEstado
				+ ", sDivisa=" + sDivisa + ", sTipoFecha=" + sTipoFecha
				+ ", sFechaDesde=" + sFechaDesde + ", sFechaHasta="
				+ sFechaHasta + ", sImporteDeste=" + sImporteDeste
				+ ", sImporteHasta=" + sImporteHasta + ", sUsuarioOrdenante="
				+ sUsuarioOrdenante + ", iPaginacionDesde=" + iPaginacionDesde
				+ ", iPaginacionNumElementos=" + iPaginacionNumElementos
				+ ", sValorOrdenacion=" + sValorOrdenacion
				+ ", sModoOrdenacion=" + sModoOrdenacion + "]";
	}

}
